package com.example.websocket.controller;

import com.example.websocket.message.brow.WiselyMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.security.Principal;

/**
 * 描述:
 * 包名: com.example.demo.controller
 * 作者: ChenGuop.
 * 日期: 2017/08/24 下午2:52.
 * 项目名称: demo-websocket
 * 版本: 1.0
 * JDK: since 1.8
 */
@Controller
public class WebSocketController {
  @Autowired
  private SimpMessagingTemplate messagingTemplate;

  @MessageMapping("/chat")
  //在springmvc 中可以直接获得principal,principal 中包含当前用户的信息
  public void handleChat(Principal principal, WiselyMessage message) {
    messagingTemplate.convertAndSend("/queue/notifications/"+principal.getName(), principal.getName() + "-send:"
            + message.getName());
    System.out.println(message.getName());
    /**
     * 此处是一段硬编码。如果发送人是wyf 则发送给 wisely 如果发送人是wisely 就发送给 wyf。
     */
    if (principal.getName().equals("wyf")) {
      //通过convertAndSendToUser 向用户发送信息,
      // 第一个参数是接收消息的用户,第二个参数是浏览器订阅的地址,第三个参数是消息本身

      messagingTemplate.convertAndSendToUser("wisely",
              "/queue/notifications", principal.getName() + "-send:"
                      + message.getName());
    } else {
      messagingTemplate.convertAndSendToUser("wyf",
              "/queue/notifications", principal.getName() + "-send:"
                      + message.getName());
    }
  }
  @MessageMapping("/oneToOne")
  //在springmvc 中可以直接获得principal,principal 中包含当前用户的信息
  public void handleOneToOne(Principal principal, WiselyMessage message) {
    /**
     * 只接受自己发送会开信息
     */
    messagingTemplate.convertAndSend("/queue/notifications/"+principal.getName(), principal.getName() + "-send:"
            + message.getName());
    System.out.println(message.getName());
  }

  /**
   * 模拟服务器端回调 通知客户端
   * @param principal
   * @param message
   */
  @GetMapping("/callback")
  @ResponseBody
  public void callback(Principal principal, String message){
    messagingTemplate.convertAndSend("/queue/notifications/"+principal.getName(), principal.getName() + "-send:"
            + message);
  }
}